func go/types.under
75 uses
go/types (current package)
assignments.go#L75: if sig, _ := under(x.typ).(*Signature); sig != nil && sig.TypeParams().Len() > 0 {
builtins.go#L161: switch t := arrayPtrDeref(under(x.typ)).(type) {
builtins.go#L218: if mode == invalid && under(x.typ) != Typ[Invalid] {
builtins.go#L320: if t, _ := under(typ).(*Basic); t != nil {
builtins.go#L448: if t, _ := under(typ).(*Basic); t != nil {
builtins.go#L738: typ, _ := under(x.typ).(*Pointer)
builtins.go#L803: switch u := under(t).(type) {
builtins.go#L895: if a, _ := under(p.base).(*Array); a != nil {
call.go#L140: if t, _ := under(T).(*Interface); t != nil && !isTypeParam(T) {
call.go#L548: if under(x.typ) == Typ[Invalid] {
conversions.go#L20: switch t, _ := under(T).(*Basic); {
conversions.go#L138: Vu := under(V)
conversions.go#L139: Tu := under(T)
conversions.go#L151: if IdenticalIgnoreTags(under(V.base), under(T.base)) && !isTypeParam(V.base) && !isTypeParam(T.base) {
conversions.go#L191: if a, _ := under(p.Elem()).(*Array); a != nil {
conversions.go#L270: t, _ := under(typ).(*Basic)
conversions.go#L275: t, _ := under(typ).(*Basic)
conversions.go#L280: _, ok := under(typ).(*Pointer)
conversions.go#L285: if s, _ := under(typ).(*Slice); s != nil {
conversions.go#L286: t, _ := under(s.elem).(*Basic)
decl.go#L437: if under(t) != Typ[Invalid] {
expr.go#L106: check.representable(x, under(x.typ).(*Basic))
expr.go#L153: return f(under(typ))
expr.go#L558: old.typ = under(typ).(*Basic)
expr.go#L651: switch u := under(target).(type) {
expr.go#L856: switch under(typ).(type) {
expr.go#L870: switch under(typ).(type) {
expr.go#L1563: if _, ok := under(x.typ).(*Interface); !ok {
expr.go#L1685: method, alt := check.assertableTo(under(x.typ).(*Interface), T)
index.go#L38: if sig, _ := under(x.typ).(*Signature); sig != nil && sig.TypeParams().Len() > 0 {
index.go#L53: switch typ := under(x.typ).(type) {
index.go#L76: if typ, _ := under(typ.base).(*Array); typ != nil {
index.go#L127: if t, _ := under(t.base).(*Array); t != nil {
index.go#L257: if u, _ := under(u.base).(*Array); u != nil {
infer.go#L528: tx = under(tx)
infer.go#L682: assert(debug && under(single.typ) == coreType(tpar))
instantiate.go#L157: Vu := under(V)
instantiate.go#L158: Tu := under(T)
instantiate.go#L162: if p, _ := Vu.(*Pointer); p != nil && under(p.base) == Typ[Invalid] {
instantiate.go#L236: if alt == nil && !t.tilde && Identical(t.typ, under(t.typ)) {
lookup.go#L100: if _, ok := under(typ).(*Interface); ok {
lookup.go#L151: switch t := under(typ).(type) {
lookup.go#L314: if u, _ := under(V).(*Interface); u != nil {
lookup.go#L408: p, _ := under(T).(*Pointer)
lookup.go#L415: if p, _ := under(T).(*Pointer); isTypeParam(p.base) {
lookup.go#L481: if p, _ := under(typ).(*Pointer); p != nil {
lookup.go#L482: if _, ok := under(p.base).(*Struct); ok {
methodset.go#L128: switch t := under(typ).(type) {
object.go#L480: typ = under(typ)
operand.go#L246: Vu := under(V)
operand.go#L247: Tu := under(T)
predicates.go#L29: u, _ := under(t).(*Basic)
predicates.go#L86: _, ok := under(t).(*Interface)
predicates.go#L121: switch t := under(T).(type) {
predicates.go#L154: switch u := under(t).(type) {
sizes.go#L51: switch t := under(T).(type) {
sizes.go#L126: switch t := under(T).(type) {
sizes.go#L252: s := under(typ).(*Struct)
stmt.go#L692: if _, ok := under(x.typ).(*Interface); ok {
struct.go#L146: switch u := under(t).(type) {
type.go#L21: func under(t Type) Type {
type.go#L37: return under(t)
type.go#L66: return under(t) // string or untyped string
typeparam.go#L111: switch u := under(bound).(type) {
typeset.go#L137: u = under(u)
typeset.go#L140: assert(Identical(u, under(u)))
typeset.go#L272: switch u := under(typ).(type) {
typeset.go#L404: u := under(t.typ)
typestring.go#L424: if t, _ := under(typ).(*Basic); t == nil || t.kind != String {
typeterm.go#L119: u = under(u)
typeterm.go#L159: ux = under(ux)
typeterm.go#L163: uy = under(uy)
typexpr.go#L163: if t, _ := under(typ).(*Interface); t != nil {
union.go#L96: u := under(t.typ)